package ru.bazunaka.bazbloglite.Usecase.impl;

import org.springframework.stereotype.Component;
import ru.bazunaka.bazbloglite.Entity.User;
import ru.bazunaka.bazbloglite.Model.RegisterRequest;
import ru.bazunaka.bazbloglite.Usecase.RegisterUserAccountCase;
import ru.bazunaka.bazbloglite.Services.UserService;
import ru.bazunaka.bazbloglite.Mapper.RegisterRequestToUserMapper;

/**
 * Фасада для регистрации пользователей.
 *
 * @author Андрей Сторожок.
 * @version 1.0
 */
@Component
public class RegisterUserAccountCaseFacade implements RegisterUserAccountCase {

    /**
     * Служба для работы с пользователями.
     */
    private final UserService userService;

    /**
     * Маппер для преобразования запроса на регистрацию в сущность User.
     */
    private final RegisterRequestToUserMapper mapper;

    /**
     * Конструктор фасада регистрации пользователей.
     *
     * @param userService служба для работы с пользователями
     * @param mapper маппер для преобразования запроса на регистрацию в сущность User
     */
    public RegisterUserAccountCaseFacade(UserService userService, RegisterRequestToUserMapper mapper) {
        this.userService = userService;
        this.mapper = mapper;
    }

    /**
     * Регистрация пользователя.
     *
     * @param registerRequest запрос на регистрацию пользователя
     */
    @Override
    public void register(RegisterRequest registerRequest) {
        User user = this.mapper.map(registerRequest);
        this.userService.createUserAccount(user);
    }
}
